package cn.jhg.account.persist;

import java.sql.Timestamp;
import java.util.List;

import cn.jhg.account.entity.MaterialBatch;

public interface MaterialBatchDao {
	/**
	 * 新增原料批次
	 * @param batch	批次实体
	 * @return		批次id
	 */
	public int addBatch(MaterialBatch batch);
	// 实体包含  t_ibcp_material_batch 表中字段及 mongodb 中属性
	// prop_id 保存属性 id
	// 实际属性保存在 mongodb 中
	// 物料批次属性格式：
	// {
	//    属性名1:{value属性值, type:属性类型, uom:单位, desc:描述, cate:分类},
	//    属性名2:{value属性值, type:属性类型, uom:单位, desc:描述, cate:分类},
	//    属性名3:{value属性值, type:属性类型, uom:单位, desc:描述, cate:分类},
	//    ...
	// }


	/**
	 * 更新原料批次
	 * @param batch 批次实体
	 * @return	Object
	 */
	public int updateBatch(MaterialBatch batch);
	// 批次id不可更新

	/**
	 * 删除原料批次
	 * @param id	批次id
	 * @return	Object
	 */
	public int deleteBatch(int id);

	/**
	 * 根据id查询原料批次
	 * @param id	批次id
	 * @return		批次实体
	 */
	public MaterialBatch queryBatchById(int id);

	/**
	 * 查找原料批次
	 * @param batchNo	批次号	
	 * @param manuName	生产厂名称
	 * @param statId	状态代码
	 * @return			批次id集合
	 */
	public List<Integer> findBatch(MaterialBatch batch);
	//(String batchNo, String manuName, int statId);
	// 生产厂参数为名字而非生产厂ID，此处要做一个关联查询
	// t_ibcp_material_batch a inner join t_ibcp_material_supplier b on a.manu_id=b.id

	/**
	 * 查找批次详细信息
	 * @param batchNo	批次号
	 * @param manuName	生产厂名称
	 * @param statId	状态代码
	 * @return			批次实体集合
	 */
	public List<MaterialBatch> findBatchDetail(MaterialBatch batch);
	//(String batchNo, String manuName, int statId);

	/**
	 * 查找批次详细信息
	 * @param batchNo	批次号
	 * @param manuName	生产厂名称
	 * @param statId	状态代码
	 * @return			批次实体集合
	 */
	public MaterialBatch findByBatchNo(String batchNo);
	
	/**
	 * 检查批次有效期
	 * @param timestamp	时间戳
	 * @return			有效期超过 timestamp 所指定时间的批次id集合
	 */
	public List<Integer> checkExpiredDate(Timestamp timestamp);
	// exp_date 字段表示有效期，检查时忽略本字段为空的记录

	/**
	 * 检查批次复检期
	 * @param timestamp	时间戳
	 * @return			复检期超过 timestamp 所指定时间的批次id集合
	 */
	public List<Integer> checkInspectionDate(Timestamp timestamp);
	// insp_date 字段表示复检期，检查时忽略本字段为空的记录
	
	/**
	 * 通过Id和有效期查询批次
	 * @param materialBatch 批次实体
	 * @return materialBatch 批次实体
	 */
	public MaterialBatch queryBatchByIdAndExpDate(MaterialBatch materialBatch);
	
	/**
	 *  通过Id和复检期查询批次
	 * @param materialBatch 批次实体
	 * @return materialBatch 批次实体
	 */
	public MaterialBatch queryBatchByIdAndInspDate(MaterialBatch materialBatch);
}
